Logic circuits are electronic circuits that perform some logical operation or group of logical operations on a set of digital input data to provide some desired digital output. For example, a simple logic circuit may perform an AND operation on input data comprising three logic level signals to provide a single output comprising the logical signal resulting from the AND operation. These types of logic circuits are included in many different types of devices from control circuits for mechanical devices, to communications devices, to data processor chips. In many cases the logical operations may be very complicated and require complicated logic circuitry.
Logic circuit design involves first determining the particular logical function or operation which must be performed by the logic circuit. In this step, the designer works with high-level logic building blocks such as AND and OR gates to specify the logical operations to be performed in the final circuit design. When determining the logical operations required in the ultimate circuit, the designer is generally not concerned with the actual circuit elements required to provide the high-level logical operation or functionality.
After determining the high-level logic operations required of the final logic circuit, logic circuit design involves determining an arrangement of circuit elements to actually perform the desired logical operations. The step of determining the actual circuit elements and arrangement of circuit elements to provide the desired logical operations is referred to as logic synthesis. Logic synthesis may be performed by defining a set or library of available circuits and then identifying an arrangement of these available circuits which is capable of consistently providing the desired logical operation. Thus, logic synthesis comprises an optimization problem constrained by the library of available circuits available for synthesis, by the required logical operation to be performed by the final circuit, and perhaps by other constraints dictated by the designer. Various software tools have been developed to perform logic synthesis. These logic synthesis tools simply provide one or more solutions to the optimization problem, based upon a library of available circuits and other constraints provided by the designer.
Prior logic synthesis tools employ circuit libraries containing many different types of circuits. These prior circuit libraries include not only numerous different circuits, but may also include numerous versions of the same circuit, employing different sized circuit elements. Utilizing a large circuit library provides a certain flexibility in developing the ultimate circuit design. However, this flexibility comes at the cost of vastly increasing the complexity of the optimization problem which must be performed. This increase in complexity results in an increase in the processing time which the synthesis tool requires in order to produce a solution.
Another problem associated with prior static circuit logic synthesis involves the timing performance of the synthesized circuit. Timing between the signals applied to the input of the synthesized static circuit and the signals appearing at the output of the circuit is entirely dependent upon the manner in which signals propagate through the various static components of the circuit. Where the logic synthesis tool is not constrained by timing considerations, a constraint that further complicates the optimization problem to be performed, the timing associated with synthesized circuit may be unpredictable. The unpredictable timing associated with the synthesized static logic circuit may make the circuit difficult to use with other components of an overall system.